// 引入Mongoose模块
const mongoose = require('mongoose')

// 连接MongoDB数据库
mongoose.connect('mongodb+srv://root:root@cluster0-jqgjo.mongodb.net/todo?retryWrites=true&w=majority', {useNewUrlParser: true}).then(() => {
    // 连接成功
    console.log('MogoDB Connected!')
}).catch(err => {
    // 连接失败
    console.log(err)
})

// 创建MongoDB图表
const todoSchema = new mongoose.Schema({item: String, status: Boolean})

// 往MongoDB数据库中存储数据
const Todo = mongoose.model('Todo', todoSchema)

// 引入Body-parser
const bodyParser = require('body-parser')

// 解析数据
const urlencodeParser = bodyParser.urlencoded({extended: false})

module.exports = function (app) {
    /**
     * 获取数据
     * @method get
     * @url '/'
     * @return json
     */
    app.get('/', function (req, res) {
        // 查找数据库数据
        Todo.find({}, function (err, data) {
            // 如果有异常则抛出异常
            if (err) throw err

            // 返回数据
            res.render('home', {datas: data})
        }).sort({'_id': -1})
    })

    /**
     * 添加数据
     * @method post
     * @url '/'
     * @return json
     */
    app.post('/', urlencodeParser, function (req, res) {
        // 添加数据库数据
        Todo(req.body).save(function (err, data) {
            // 如果有异常则抛出异常
            if (err) throw err

            console.log('save success!')

            // 返回数据
            res.json({state: 200, data: data})
        })
    })

    /**
     * 修改数据
     * @method put
     * @url '/:id'
     * @return json
     */
    app.put('/:id', urlencodeParser, function (req, res) {
        // 修改数据库数据
        Todo.findByIdAndUpdate(req.body._id, {status: req.body.status}, function (err, data) {
            // 如果有异常则抛出异常
            if (err) throw err

            console.log('findByIdAndUpdate success!')

            res.json({state: 200, data: data})
        })
    })

    /**
     * 删除数据
     * @method delete
     * @url '/:id'
     * @return json
     */
    app.delete('/:id', function (req, res) {
        // 删除数据库数据
        Todo.find({_id: req.params.id}).remove(function (err, data) {
            // 如果有异常则抛出异常
            if (err) throw err

            console.log('delete success!')

            // 返回数据
            res.json({state: 200, data: data})
        })
    })
}